package com.aeoj.clientmanagement.domain.response;

import com.aeoj.clientmanagement.enums.ResponseCodeEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * author: ZSM
 * time: 2025-04-16 22:01
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class R {
    private int code;
    private String msg;
    private Object data;

    // 成功响应（无数据）
    public static R ok() {
        return R.builder()
                .code(ResponseCodeEnum.SUCCESS.getCode())
                .msg(ResponseCodeEnum.SUCCESS.getMessage())
                .build();
    }

    // 成功响应（带数据）
    public static R ok(Object data) {
        return R.builder()
                .code(ResponseCodeEnum.SUCCESS.getCode())
                .msg(ResponseCodeEnum.SUCCESS.getMessage())
                .data(data)
                .build();
    }

    // 成功响应（自定义消息 + 数据）
    public static R ok(String msg, Object data) {
        return R.builder()
                .code(ResponseCodeEnum.SUCCESS.getCode())
                .msg(msg)
                .data(data)
                .build();
    }

    // 错误响应（默认500错误）
    public static R error(String msg) {
        return R.builder()
                .code(ResponseCodeEnum.INTERNAL_SERVER_ERROR.getCode())
                .msg(msg)
                .build();
    }

    // 错误响应（使用枚举）
    public static R error(ResponseCodeEnum codeEnum) {
        return R.builder()
                .code(codeEnum.getCode())
                .msg(codeEnum.getMessage())
                .build();
    }

    // 错误响应（使用枚举 + 自定义消息）
    public static R error(ResponseCodeEnum codeEnum, String msg) {
        return R.builder()
                .code(codeEnum.getCode())
                .msg(msg)
                .build();
    }

    // 错误响应（使用枚举 + 自定义消息 + 数据）
    public static R error(ResponseCodeEnum codeEnum, String msg, Object data) {
        return R.builder()
                .code(codeEnum.getCode())
                .msg(msg)
                .data(data)
                .build();
    }

    // 错误响应（自定义code + msg）
    public static R error(int code, String msg) {
        return R.builder()
                .code(code)
                .msg(msg)
                .build();
    }

    // 错误响应（自定义code + msg + data）
    public static R error(int code, String msg, Object data) {
        return R.builder()
                .code(code)
                .msg(msg)
                .data(data)
                .build();
    }
}
